///*
//
//@author: zjc
//@file: lianxi.go
//@time: 2023/2/10 22:13
//*/
package main
//1.go语言函数可以嵌套吗？ 怎么在函数中返回另一个函数？
//全局变量：写在函数外面的变量，只需要声明一次,多次声明报错
//局部变量：只能在函数体内定义局部变量，后面一定要使用，只需要声明一次,多次声明报错,只能在函数体内使用
//
//2.go语言函数可以嵌套吗？ 怎么在函数中返回另一个函数？
//不可以嵌套，把函数作为另一个函数的参数返回
//
//3、go语言中main函数和init函数的作用，以及执行顺序
//main函数main 函数是程序的入口，也就是说程序的运行一定是从 main 函数开始的。
//init函数是用于程序执行前做包的初始化的函数，比如初始化包里的变量等
//init函数不能被其他函数调用，而是在main函数执行之前，自动被调用
//
//4、go mod的作用？相比于gopath，它的优势在哪里？
//用于解决之前没有地方记录依赖包具体版本的问题，方便依赖包的管理。
//优势：1、项目不在需要放到$GOPATH/src
//2、依赖包的版本控制
//3、依赖包中的地址失效的解决方案
//4、在项目中执行go get命令可以下载依赖包，并且还可以指定下载的版本
//
//5、模块中的公有变量（函数）应该怎么去定义？
//首字母大写是公有的，首字母小写是私有的
//
//6、go支持默认参数吗？支持可边长参数吗？
//不支持默认参数，支持可变长参数
//
//7、defer 语句的执行顺序
//多个defer的执行顺序为“后进先出”；
//defer、return、返回值三者的执行逻辑应该是：return最先执行，return负责将结果写入返回值中；
//接着defer开始执行一些收尾工作；最后函数携带当前返回值退出。
//
//8、如何判断一个变量是不是int类型？
//用fmt.Printf("v1 type:%T\n", v1)，看v1的值是否为int
//
//9、如何判断两个切片是否相等？
//循环切片进行比较
//func ForEqual(x, y []byte) bool {
//if len(x) != len(y) {
//return false
//}
//if (x == nil) != (y == nil) {
//return false
//}
//for i, v := range x {
//if v != y[i] {
//return false
//}
//}
//return true
//}
//
//
//
//10、结构体打印%v和%+v的区别
//%v    只输出所有的值
//%+v 先输出字段名字，再输出该字段的值
//
//11、go语言支持面向对象吗？ 它如何实现面向对象？
//不支持面向对像
//通过结构体和接口来实现面向对象
//
//12、go语言中map和slice的底层如何实现，如何扩容？
//map:
//map 的底层本质上是实现散列表
//采用的是增量扩容方案，当开始扩容后，每一次操作都会触发一部分扩容搬迁工作
//
//slice:
//是一个结构体，里面包含了指向数组的地址，并通过 len、cap 保存数组的元素数、容量
//当使用 append时候，会检查底层的数组的长度是否已经不够，
//如果长度不够，则会新建一个数组，把原数组的数据拷贝过去，再将 slice 中的指向数组的指针指向新的数组。
//
//13、go语言的垃圾回收管理，go的gc有几个阶段
//两个阶段，标记和清除
//第一步，找出不可达的对象，然后做上标记。
//第二步，回收标记好的对象。
//
//14、空struct{} 的作用，以及go中的内存对齐
//节省内存
//Go 在编译的时候会按照一定的规则自动进行内存对齐。
//这么设计是为了减少 CPU 访问内存的次数，加大 CPU 访问内存的吞吐量。
//
//15、go中有异常类型吗？
//没有异常类型，只有错误类型（Error）。
//
//16、go中指针的作用是什么？什么是rune类型
//1）指针类型用于传递地址, 而不是传递值,  所有的参数都是传递一个复制的值.
//如果值的体积过大, 那么就会严重降低效率, 而传递一个地址, 就会大大提高效率.
//另外传递指针也能实现对变量值的修改.
//2）如果一个复杂类型的值被传递了若干次后, 和自己比较, 虽然用于保存的容器和名称变了, 但由于保存值的地址不变,
//其保存值不变
//rune 是类型 int32 的别名，在所有方面都等价于它，用来区分字符值跟整数值。
//使用单引号定义 ，返回采用 UTF-8 编码的 Unicode 码点。Go 语言通过 rune 处理中文，支持国际化多语言。
//
//17、uint型的变量分别为1,2，它们相减结果是多少
//1
//
//18、go中的reflect库作用是什么
//(1)获取变量的类别和类型信息
//(2)修改基本数据类型变量的值
//(3)通过反射获取结构体的字段名、字段类型和字段的值
//
